package JavaEE.NetWork7;

//
// HTTPS 工作过程
// 1.引入对称加密:
//  生成一个密钥,明文到密文,通过这个密钥进行.密文到明文,也通过这个密钥进行.
//  (一个服务器对应服务多个客户端,每个客户端要有自己独有的密钥,防止黑客伪装成用户获取密钥)
//  (而要做到这样,就得传输密钥,这样就有可能被黑客获取到,所以"不合理!")
// 2.引入非对称加密:
//  非对称加密有"两个密钥",这两个密钥,其中一个可以公开出去(公钥),另一个则不能公开(私钥)
//  比如:(使用公钥加密,就使用私钥解密)(使用私钥加密,就使用公钥解密)
//  (服务器将"密钥"通过"公钥"加密后传输,而"黑客"只有"公钥",无法解密,等到了客户端,才能用"私钥"解密)
//  场景1:HTTPS 安全通信(非对称+对称加密)
//   1)浏览器用网站的公钥加密数据(如密码).
//   2)网站服务器用私钥解密,然后生成一个对称密钥(如AES密钥)传回.
//   3)之后双方用对称密钥加密通信(因为对称加密更快).
// 3.中间人攻击:
//  1)客户端:询问服务器,公钥是什么?
//  2)服务器:(生成密钥对,公钥:A,私钥:B)告知客户端,公钥是A
//  3)黑客:自己生成了一对密钥对(公钥C,私钥D),在(服务器->客户端)的路径中
//        将原来的消息(公钥是A)替换成(公钥是C),这样后续客户端发送的密文,
//        不仅黑客就能解密,还能再解密后,将密文换回(公钥A)加密的形式,防止被发现.
// 4.引入证书:
//   证书内容包含:(公钥A,证书对应服务器域名如"www.example.com",发布机构,有效期,所有者,"数字签名")
//
//   -----数字签名的生成:-----
//   公证机构,生成证书后,针对证书计算校验和,拿着自己生成的"非对称密钥对"(pub3/pri3)
//   使用其中的私钥pri3对校验和进行加密.得到了数字签名.
//   -----数字签名的验证:-----
//   客户端拿到证书,按照同样的校验和算法,对证书的这些字段再算一次校验和,得到checksum1(客户端自己算的)
//   使用公证机构的pub3公钥,对证书中的数字签名,进行解密,得到checksum2(公证机构算的)
//   如果两者相等.说明证书没有被篡改过,证书中的公钥就是科学的(服务器原始生成的)
//   如果黑客篡改了证书中的公钥,算出来的checksum1一定不等于checksum2.
//
//   证书解决的核心问题,就是让客户端能够识别出(当前的公钥,是服务器本身创建的,还是黑客伪造的)
//   服务器:服务器会申请证书,然后服务器不直接返回公钥,而是发送证书.
//   客户端:检查证书是否由可信CA(证书颁发机构)签发,核对整数中的域名
//        是否与访问的网址一致,检验证书是否过期或被吊销.
//   -----可能出现的疑问与解答:-----
//   1)黑客能否篡改公钥?
//     不能,一旦篡改公钥,checksum对不上,客户端就能识别出来.
//   2)黑客能否自己搞一个证书,整个替换掉服务器的证书?
//     不能,证书中包含了服务器的 地址/域名,本来访问百度网站,得到的域名,是别人的域名,浏览也容易识别.
//   3)黑客是否可以篡改公钥同时,也把数字签名也篡改了呢?
//     不能,数字签名通过(公证机构的私钥)来进行加密,这个私钥黑客拿不到
//   4)公证机构的公钥如何被客户端拿到?黑客是否可能伪造公证机构的公钥呢?
//     不能,公证机构的公钥不是通过网络获取的,而是内置再操作系统.
//
//
//
//
public class Demo1 {

}
